﻿namespace StepsManagerLibrary.Interfaces
{
    /// <summary>
    /// Defines a set of Methods that enables a StepManager to work on items
    /// that implement the IStepControl interface
    /// </summary>
    /// <typeparam name="T">
    /// IStepControl : Control specifically designed to be managed as a Step
    /// </typeparam>
    public interface IStepControlManager<T> : IStepManager<T> where T : class, IStepControl
    {
        #region Properties

        /// <summary>
        /// During the transition between 2 steps, 
        /// it gives the source step
        /// </summary>
        T SourceStep { get; }

        /// <summary>
        /// During the transition between 2 steps, 
        /// it gives the destination step
        /// </summary>
        T DestinationStep { get; } 

        #endregion

        #region Steps List

        bool RemoveStep(string stepTitle);

        #endregion

        #region Navigation

        /// <summary>
        /// Move to the step with a specific title
        /// </summary>
        /// <param name="stepTitle">Title of the step expected</param>
        /// <returns>Move has been successfully performed</returns>
        bool GoTo(string stepTitle);

        #endregion
    }
}
